home *** CD-ROM | disk | FTP | other *** search
- %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- % Version 2.1
- % 6/27/86
- % Written by: B.A. Leland (XHEMIA:BAL)
- % Calif Inst of Technology
- % Recognizes only ascending sequential footnote numbers, prints
- % everything else as read in the list
- % Required defs:
- % dash : defined as $^{-}$
- % checkref#1 : to determine if the reference has yet been
- % cited --- calls quickcnt
- % note#1 : initializes flags, counters, calls refext
- % refext#1 : does all the work, calls checkref, then prints
- % the footnote numbers. If newref=true write the
- % reference to the output file with its footnote
- % number, and redefine the def of the reference to
- % equal the current footnote number. If the
- % references are anything but ascending sequential
- % numbers, print the numbers separated by commas.
- % quickcnt#1 : based on Knuth's length macro (TeXbook, p.219)
- % counts the no. of non-blank characters in the
- % reference. If > or = 4, set the newref flag to
- % true.
- % Required misc:
- % counters
- % ftnum: previous footnote number of a newly cited ref
- % prev: previous PRINTED footnote number
- % flags
- % dsh : true = enable dash printing for no. ranges
- % newref : true = a reference that has not been cited
- %
- %\immediate\openout1=reflist % open the ouput file 'reflist.tex'
- %\newcount\ftnum % footnote number counter
- %\newcount\prev % previous footnote number
- %\newif\ifdsh % dsh=true: enable "dash" printing for ranges of #s
- %\def\dash{$^{-}$} % a dash for ranges of numbers
- %---------------------------------------------------------------------
- %\def\note#1{{
- %\dshtrue % toggle dsh flag to enable range printing
- %\prev=0 % initialize prev counter
- %\count0=0 % initialize cycle counter
- %\refext#1\end}} % call refext with list of references as argument
- %---------------------------------------------------------------------
- %\def\refext#1{
- %\ifx#1\end % \end is appended at end of reference list
- % \ifdsh % dsh=true do nothing
- % \else $^{\number\prev}$\fi\let\next=\relax % finish the range, quit
- %\else\checkref#1 % see if the reference has been cited previously
- % \ifnewref\global\advance\ftnum by1 % new reference,
- % % inc ftnum counter
- % \immediate\write1{\noexpand\item{$^{\the\ftnum}$}#1}
- % \xdef#1{\the\ftnum} % write the reference to the output file,
- % % and redefine the reference to be
- % % the current footnote number
- % \fi
- % \ifnum\count0=0 $^{#1}$ % first cycle, print the first no.
- % \else \ifnum\prev=#1 % duplicate reference, ignore
- % \else\advance\prev by1 % increment the prev counter
- % \ifnum\prev=#1 % if true, sequence is sequential
- % \ifdsh % if dsh enabled,
- % \dash % print a dash for the range
- % \dshfalse % and disable the dsh flag
- % \fi
- % \else\ifdsh $^{,\,#1}$ % if dsh enabled, print ", #"
- % \else % a dash was printed previously
- % \advance\prev by-1 % restore prev counter
- % $^{\number\prev ,\,#1}$ % finish the range, and
- % % print the new (non-sequential) no.
- % \dshtrue % toggle the dsh flag
- % \fi
- % \fi
- % \fi
- % \fi
- % \prev=#1 % save current footnote number in prev counter
- % \advance\count0 by1 % increment cycle counter
- % \let\next=\refext % recursive call
- %\fi
- %\next}
- %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- %\newcount\qckcntr
- %\newif\ifnewref % newref=true: 1st occurance of a given reference
- %---------------------------------------------------------------------
- %\def\checkref#1{{
- %\global\newreffalse % toggle the newref flag
- %\qckcntr=0 % initialize cycle "register"
- %\expandafter\quickcnt#1\end % expand the passed reference appending \end
- %\relax}}
- %---------------------------------------------------------------------
- %\def\quickcnt#1{
- %\ifx#1\end \let\next=\relax % relax and quit
- %\else\advance\qckcntr by1 % increment cycle register
- % \ifnum\qckcntr<4 % <4 cycles means nothing, so do nothing
- % \else\global\newreftrue % >= 4 means the reference has not been
- % % previously cited, toggle the newref flag
- % \fi
- % \let\next=\quickcnt % recursive call
- %\fi
- %\next}
- %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- %________________________BEGIN__DEFS__________________________________
- %
- \immediate\openout1=reflist % open the ouput file 'reflist.tex'
- \newcount\ftnum % footnote number counter
- \newcount\prev % previous footnote number
- \newif\ifdsh % dsh=true: enable dash printing
- \def\dash{$^{-}$}
- \def\note#1{{\dshtrue \prev=0 \count0=0 \refext#1\end}}
- \def\refext#1{\ifx#1\end
- \ifdsh\else $^{\number\prev}$\fi\let\next=\relax
- \else\checkref#1\ifnewref\global\advance\ftnum by1 \immediate
- \write1{\noexpand\item{$^{\the\ftnum}$}#1}\xdef#1{\the\ftnum}\fi
- \ifnum\count0=0 $^{#1}$\else \ifnum\prev=#1 \else
- \advance\prev by1 \ifnum\prev=#1 \ifdsh \dash\dshfalse\fi\else
- \ifdsh $^{,\,#1}$\else
- \advance\prev by-1 $^{\number\prev ,\,#1}$\dshtrue \fi\fi\fi\fi
- \prev=#1 \advance\count0 by1 \let\next=\refext\fi \next}
- %
- \newcount\qckcntr
- \newif\ifnewref % newref=true: 1st occurance of a given reference
- \def\checkref#1{{\global\newreffalse\qckcntr=0
- \expandafter\quickcnt#1\end \relax}}
- \def\quickcnt#1{\ifx#1\end \let\next=\relax
- \else\advance\qckcntr by1 \ifnum\qckcntr<4 \else\global\newreftrue\fi
- \let\next=\quickcnt\fi \next}
- %
- %__________________________END__DEFS__________________________________
- %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- %
- % S A M P L E U S A G E
- %
- % \def\a{this is reference a}
- % \def\aaa{aaaaa}
- % \def\b{this is reference b which has \reff }
- % \def\c{this is reference c which has \reff }
- % \def\d{this is reference d which has \reff }
- % \def\e{this is reference e which has \reff }
- % \def\g{this is reference e which has \reff }
- % \def\reff{reference f}
- %
- % {\rm
- % \ftnum=9
- % This is the example\note{\a} of
- % a\note{\b} paragraph
- % which contains footnotes that will ultimately end up on
- % a reference page.
- % This is the
- % second\note{\a} which
- % is supposed to be the same as the first reference.
- % If we continue, we\note{\c\b} should get another
- % one\note{\d} and\note{\a} so\note{\e} on.
- % If one needs to recall a couple of references\note{\aaa} one
- % uses a the same macro\note{\a\b\c\d\e} as before.
- % It is supposed to handle\note{\a\b\d\e} most any situation
- % up to and almost including\note{\e\d\c\b\a} except
- % this\note{\b\a\d\e} or this.\note{\a\b\c\d\d} One
- % must be cautioned that this has not been fully tested as yet..........
- % \vskip0.5truein
- % \immediate\closeout1
- % \vfill\eject
- % \baselineskip=14pt
- % \parindent=0pt
- % \parskip=0.1truein
- % \input reflist.tex
- % }
- % \vfill\end
- %
-